package br.unifor.cadeventos.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.List;

import br.unifor.cadeventos.entity.Eventos;

public class EventosDAO {

	private EntityManager em = new EntityManager() {

		@Override
		public Object trataResultSet(ResultSet resultSet) throws SQLException {
			TipoEventosDAO tipoEvento = new TipoEventosDAO();

			Eventos evento = new Eventos();
			evento.setId(resultSet.getInt("id"));
			evento.setTitulo(resultSet.getString("titulo"));
			evento.setLocalEvento(resultSet.getString("local_evento"));
			evento.setDescricao(resultSet.getString("descricao"));
			evento.setDataInicio(resultSet.getTimestamp("data_inicio"));
			evento.setDataFim(resultSet.getTimestamp("data_fim"));
			evento.setTipoEvento(tipoEvento.buscarPorId(resultSet
					.getInt("tipo_evento_id")));
			return evento;
		}
	};

	public void salvar(Eventos evento) throws SQLException {

		String sql = "insert into eventos(titulo, local_evento, descricao, "
				+ "data_inicio, data_fim, tipo_evento_id) "
				+ "values (?, ?, ?, ?, ?, ?)";
		em.executeQuery(sql, evento.getTitulo(), evento.getLocalEvento(),
				evento.getDescricao(), new Timestamp(evento.getDataInicio()
						.getTime()), new Timestamp(evento.getDataFim()
						.getTime()), evento.getTipoEvento().getId());
	}

	public void excluirTodos() throws SQLException {
		String sql = "delete from eventos";
		em.executeQuery(sql);
	}

	@SuppressWarnings("unchecked")
	public List<Eventos> buscaEventosPorTitulo(String titulo)
			throws SQLException {
		String sql = "select id, titulo, local_evento, descricao, data_inicio, "
				+ "data_fim, tipo_evento_id from eventos where titulo ilike ?";
		return (List<Eventos>) em.getResultList(sql, "%" + titulo + "%");

	}
	
	@SuppressWarnings("unchecked")
	public List<Eventos> buscaEventosPorLocal(String titulo)
			throws SQLException {
		String sql = "select id, titulo, local_evento, descricao, data_inicio, "
				+ "data_fim, tipo_evento_id from eventos where local_evento ilike ?";
		return (List<Eventos>) em.getResultList(sql, "%" + titulo + "%");

	}

}
